perm filename IMLHAK.BO[UP,DOC] blob sn#065751 filedate 1973-10-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00004 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	HACKER'S-EYE VIEW OF PDP-10/IMLAC COMMUNICATION
C00006 00003	RECENT TTYSER MODS TO SUPPORT IMLACS
C00008 00004	SUMMARY OF COMMANDS TO THE IMLAC (all prefixed with a rubout)
C00011 ENDMK
C⊗;
HACKER'S-EYE VIEW OF PDP-10/IMLAC COMMUNICATION

FROM THE IMLAC TO THE 10:

The  TTY-like communication  line between  the  two machines  handles
8-bit  characters.   Since our  system's character  set uses  a 7-bit
code and TTYSER masks out the 8th bit, a small mod to  TTYSER allowed
some  extra information  to come  across.   The IMLAC  sends ordinary
data  as 7 bits with the  8th set to zero.   This allows all 127 data
characters (nulls excluded) to  be shipped.  Control  characters have
the  eigth bit set  to one,  and TTYSER recognizes  that combination.
Thus, the code for a β is 003  and goes through TTYSER as a β,  while
the code  203 becomes  ↑C.  Special  characters with  the 8th bit  on
which have no  recognized function in TTYSER get the extra bit masked
out.

TTYSER MOD #1:  the new IMLAC program,  in character mode,   can send
the  bucky  bits as  octal codes  241-243.   Have  changed  TTYSER to
recognize these codes  as a prefix  and add  the appropriate bits  to
the following  character.  The bits  are saved in bits  34:35 of word
IMLHAC in the TTY DDB.


FROM THE 10 TO THE IMLAC:

TTYSER (God rot  it) keeps output buffers  for devices on the  630 in
7-bit bytes and adds even  parity at the last moment before sending a
character.  Rather than change that practice, I decided to develop  a
command structure within the 7-bit restriction and  use the parity to
check for  a valid command.  The FIVOUT  UUO (TTYUUO 17,) is designed
for  this  purpose.    It  sends  the  addressed  word  as  up  to  5
inseparable  characters,  prefixed  with   a  rubout  if  the  word's
low-order  bit is  a 1.   The  output from  FIVOUT terminates  on the
first null in the word for less than 5 character output.

The IMLAC recognizes  a rubout  as a signal  that a command  follows.
The next character  received is the command, and  it either implies a
count of how many  more characters are needed  to finish the  command
or it  contains an  explicit count  in its  low-order 3  bits.   This
count can  be from 0 to 7,  but because of the size  of the data that
FIVOUT uses  the practical  limits  are 0  to 4.   The  IMLAC  checks
parity on all  received characters.  A command must  be received with
correct  parity on  all  of its  component characters  (including the
rubout), or the IMLAC will merely display it and not execute it.
RECENT TTYSER MODS TO SUPPORT IMLACS

(See next page for descriptions of commands)

#2. INCHRW  (TTYUUO 0) checks  whether there is  anything in  the TTY
input  buffer.   If not,  it sends  a 001  command before  going into
IOWQ.

#3.  INCHWL  (TTYUUO  4), in  special  activation  mode,  checks  for
activators in  the TTY input buffer.   If there are  none, it sends a
002 command before going into  IOWQ.  NOTE: only the standard  SPACTN
table (anything but a letter or a digit) is available.

#4. PTLOAD (PTYUUO  15) loads the  IMLAC's edit buffer  using 061-064
commands  and ending with a  005. WARNING: IWAIT will  not return the
length of the re-edited line as it does for DD displays.

#5.  PTWR1W (PTYUUO  7)  looks for  the  codes for  <CTL>[SPACE]  and
<CTL>[TAB].  It  sends the first as command 006,001 (space forward 1)
and the second as  006,176 (space forward a  bunch).  Other codes  do
exactly the same thing as before.
SUMMARY OF COMMANDS TO THE IMLAC (all prefixed with a rubout)

	OCTAL NO. OF
CHAR	CODE  OPERANDS	FUNCTION

λ	 010	0 __	Print a center  dot (the hidden code  for the
			null)
TAB	 011	0   \
LF	 012	0    |
VT	 013	0    |	Print  that char  the  way  DD does  it  when
FF	 014	0    |	prefixed with a rubout.
CR	 015	0 __/
∞	 016	0	No-op
∂	 017	0	Print a BS char as on the DD.

1-7	 060+n	n	Enter re-edit mode, clear the  edit buffer if
			mode wasn't  re-edit, and add the following n
			characters to the  edit line  as if the  user
			had typed  them. Re-edit  mode locks  out the
			IMLAC  keyboard except the  CALL, ESC, BREAK,
			and CLEAR keys.

0	 060	0	Enter line mode.   Used to  terminate re-edit
			mode  and leave the  cursor at  the right end
			of the line.

∧	 004	0	Move the cursor to the left  end of the line.
			This  command   does  not  terminate  re-edit
			mode.

¬	 005	0	Same as 004, but terminates re-edit mode.

ε	 006	1	Move the cursor right the  number of positions
			specified by  the octal code of the following
			character, then terminate re-edit mode.

π	 007	0	Clear edit line, terminate re-edit.

↓	 001	0	INCHRW.  If the edit buffer  is not empty and
			the cursor  is not at the  left end, send the
			first char from the  buffer.  Otherwise,  set
			the break table to  activate on the next char
			typed.

α	 002	0	DDT  mode  INCHWL.     If  the   edit  buffer
			contains  a word-mode break char  to the left
			of the cursor,  then send  the first part  of
			the  buffer up  to  and  including the  first
			such  char.   Otherwise, set  the break table
			to activate on the next such char typed.

β	003	0	Enter character mode.

The IMLAC reverts to  line mode after complying with the  001 and 002
commands. (These commands are no-ops in Character mode.)